﻿#ifndef SQLITEDB_H
#define SQLITEDB_H

#include <sqlite3.h>    // SQLite C 库头文件，提供数据库操作接口
#include <string>       // std::string 用于存储文件路径和 SQL 语句
#include <mutex>        // std::mutex 用于线程安全的连接池访问
#include <queue>        // std::queue 用于存储数据库连接的连接池

// SQLite 数据库工具类
class SQLiteDB {
public:
    // 构造函数：传入数据库文件路径，自动打开或创建数据库
    SQLiteDB(const std::string& dbFile);

    // 析构函数：关闭数据库连接并释放连接池
    ~SQLiteDB();

    // ----------------- 基础 CRUD 操作 -----------------
    // Execute: 执行不返回结果的 SQL 语句（如 CREATE、INSERT、UPDATE、DELETE）
    bool Execute(const std::string& sql);

    // Query: 执行查询 SQL 语句（如 SELECT），通过回调函数处理结果
    // callback: 用户提供的回调函数，每行数据调用一次
    // data: 可选参数，传入回调函数使用
    bool Query(const std::string& sql, int(*callback)(void*, int, char**, char**), void* data=nullptr);

    // ----------------- 连接池管理 -----------------
    // 获取一个可用数据库连接（从连接池取出）
    sqlite3* GetConnection();

    // 释放连接（将连接放回连接池）
    void ReleaseConnection(sqlite3* conn);

private:
    std::string dbFile_;                // 数据库文件路径
    std::queue<sqlite3*> connPool_;     // 连接池队列，存储 sqlite3* 连接
    std::mutex poolMutex_;              // 互斥锁，保证多线程访问连接池安全
    int poolSize_ = 5;                  // 默认连接池大小
    void InitPool();                     // 初始化连接池函数，提前创建数据库连接
};

#endif
